home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Online / opennap / redirect.c < prev    next >
C/C++ Source or Header  |  2001-06-08  |  2KB  |  104 lines

  1. /* Copyright (C) 2000-1 drscholl@users.sourceforge.net
  2.    This is free software distributed under the terms of the
  3.    GNU Public License.  See the file COPYING for details.
  4.  
  5.    $Id: redirect.c,v 1.3 2001/02/15 08:39:45 drscholl Exp $ */
  6.  
  7. #include <stdlib.h>
  8. #include "opennap.h"
  9.  
  10. /* 821 [ :sender ] <nick> <server> <port>
  11.  * redirect client to another server
  12.  */
  13. HANDLER (redirect_client)
  14. {
  15.     char *sendernick;
  16.     USER *sender, *user;
  17.     int ac = -1;
  18.     char *av[3];
  19.     int port;
  20.  
  21.     (void) len;
  22.     if (pop_user_server (con, tag, &pkt, &sendernick, &sender))
  23.     return;
  24.  
  25.     if (pkt)
  26.     ac = split_line (av, FIELDS (av), pkt);
  27.     if (ac < 3)
  28.     {
  29.     unparsable (con);
  30.     return;
  31.     }
  32.  
  33.     if (sender->level < LEVEL_ADMIN)
  34.     {
  35.     permission_denied (con);
  36.     return;
  37.     }
  38.  
  39.     port = atoi (av[2]);
  40.     if (port < 0 || port > 65535)
  41.     {
  42.     if (ISUSER (con))
  43.         send_cmd (con, MSG_SERVER_NOSUCH, "invalid port");
  44.     return;
  45.     }
  46.  
  47.     user = hash_lookup (Users, av[0]);
  48.     if (!user)
  49.     {
  50.     nosuchuser (con);
  51.     return;
  52.     }
  53.  
  54.     if (ISUSER (user->con))
  55.     send_cmd (user->con, tag, "%s %s", av[1], av[2]);
  56.  
  57.     notify_mods (CHANGELOG_MODE, "%s redirected %s to %s:%s",
  58.          sendernick, av[0], av[1], av[2]);
  59.  
  60.     pass_message_args (con, tag, ":%s %s %s %s", sendernick, av[0], av[1],
  61.                av[2]);
  62. }
  63.  
  64. /* 822 [ :sender ] <nick> <server>
  65.  * redirect client to a metaserver
  66.  */
  67. HANDLER (cycle_client)
  68. {
  69.     char *sendernick;
  70.     USER *sender, *user;
  71.     char *nick, *server;
  72.  
  73.     (void) len;
  74.     if (pop_user_server (con, tag, &pkt, &sendernick, &sender))
  75.     return;
  76.  
  77.     if (sender->level < LEVEL_ADMIN)
  78.     {
  79.     permission_denied (con);
  80.     return;
  81.     }
  82.     nick = next_arg (&pkt);
  83.     server = next_arg (&pkt);
  84.     if (!nick || !server)
  85.     {
  86.     unparsable (con);
  87.     return;
  88.     }
  89.     user = hash_lookup (Users, nick);
  90.     if (!user)
  91.     {
  92.     nosuchuser (con);
  93.     return;
  94.     }
  95.  
  96.     if (ISUSER (user->con))
  97.     send_cmd (user->con, tag, "%s", server);
  98.  
  99.     notify_mods (CHANGELOG_MODE, "%s cycled %s to %s", sendernick,
  100.          sendernick, nick, server);
  101.  
  102.     pass_message_args (con, tag, ":%s %s %s", sendernick, nick, server);
  103. }
  104.